package ar.com.seminario.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import ar.com.seminario.common.domain.entity.Identifiable;
import ar.com.seminario.model.enumerados.EstadoSolicitudCandidato;

/**
 * Detalla la relacion solicitud de ingreso candidato y el estado de la misma.
 * 
 * @author Pablo Lamas
 * 
 */
@Entity
@Table(name = "solicitud_candidato")
public class SolicitudCandidato implements Identifiable<Long> {

	/**
	 * Identificador de la entidad.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id", nullable = false)
	private Long id;

	/**
	 * Identificador de la entidad.
	 */
	@ManyToOne
	@JoinColumn(name = "id_candidato", nullable = false)
	private Candidato candidato;

	/**
	 * Identificador de la entidad.
	 */
	@ManyToOne
	@JoinColumn(name = "id_solicitud", nullable = false)
	private SolicitudIngreso solicitudIngreso;

	/**
	 * Estado de la solicitud.
	 */
	@Column(name = "estado_solicitud_candidato_id", nullable = false)
	private Long estadoSolicitudCandidatoId;

	/**
	 * Constructor por defecto.
	 */
	public SolicitudCandidato() {

	}

	public Long getId() {
		return id;
	}

	protected void setId(Long id) {
		this.id = id;
	}

	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	public SolicitudIngreso getSolicitudIngreso() {
		return solicitudIngreso;
	}

	public void setSolicitudIngreso(SolicitudIngreso solicitudIngreso) {
		this.solicitudIngreso = solicitudIngreso;
	}

	public EstadoSolicitudCandidato getEstadoSolicitudCandidato() {
		return EstadoSolicitudCandidato.fromId(this.estadoSolicitudCandidatoId);
	}

	public void setEstadoSolicitudCandidatoId(EstadoSolicitudCandidato estadoSolicitudCandidato) {
		if (estadoSolicitudCandidato != null) {
			this.estadoSolicitudCandidatoId = estadoSolicitudCandidato.getId();
		}
	}

}
